import store from "@/store";

function checkPermission(el, binding, vnode) {
  const { value } = binding;
  const permissionList = store.getters && store.getters.permissionList;
  if (!value) return el.parentNode && el.parentNode.removeChild(el);
  const modelId = vnode.context._routerRoot._route.meta.modelId || "";
  if (!modelId) return el.parentNode && el.parentNode.removeChild(el);
  const list = permissionList.filter((o) => o.modelId === modelId);
  if (!list.length) return el.parentNode && el.parentNode.removeChild(el);
  const btnList = list[0] && list[0].button ? list[0].button : [];
  if (!btnList.length) {
    el.parentNode && el.parentNode.removeChild(el);
  } else {
    const hasPermission = btnList.some((btn) => btn.enCode === value);
    if (!hasPermission) {
      const nodeName = el.nodeName;
      if (nodeName == "BUTTON") {
        // 兼容一下button按钮的处理,直接移除节点。
        el.parentNode && el.parentNode.removeChild(el);
      } else {
        // 20240129 为解决 Tabs标签页，v-has不生效的问题，增加的处理逻辑。
        // 创建一个注释元素
        if (el && binding && vnode) {
          const comment = document.createComment(" ");
          // 设置value值
          Object.defineProperty(comment, "setAttribute", {
            value: () => undefined,
          });
          // 用注释节点替换 当前页面元素
          vnode.elm = comment;
          // 下面作为初始化操作 赋值为空
          vnode.text = " ";
          vnode.isComment = true;
          vnode.context = undefined;
          vnode.tag = undefined;
          vnode.data.directives = undefined;

          // 判断当前元素是否是组件  如果是组件的话也替换成 注释元素
          if (vnode.componentInstance) {
            vnode.componentInstance.$el = comment;
          }
          if (el.parentNode) {
            // 从 DOM 树中删除 node 节点，除非它已经被删除了。
            el.parentNode.replaceChild(comment, el);
          }
        }
      }
    }
  }
}

export default {
  inserted(el, binding, vnode) {
    checkPermission(el, binding, vnode)
  },
  update(el, binding, vnode) {
    checkPermission(el, binding, vnode)
  }
};
